Spring এর @RestController এবং @RequestBody এর সাথে Jackson Integration

Java Technologies - জ্যাকসন (Jackson) - Jackson এবং Spring Boot Integration
220

Spring Framework এবং Jackson লাইব্রেরি একত্রে কাজ করে JSON Serialization (Java Object থেকে JSON এ রূপান্তর) এবং Deserialization (JSON থেকে Java Object এ রূপান্তর) সহজ করতে। Spring এর @RestController এবং @RequestBody অ্যানোটেশন ব্যবহার করে Jackson স্বয়ংক্রিয়ভাবে JSON ডেটা এবং Java Object এর মধ্যে ম্যাপিং পরিচালনা করে।


Spring এবং Jackson Integration এর প্রধান বৈশিষ্ট্য

  1. @RequestBody: ইনকামিং JSON ডেটা Java Object এ রূপান্তর করে।
  2. @ResponseBody: Java Object কে JSON আউটপুটে রূপান্তর করে।
  3. Spring Boot এ Jackson ডিফল্টভাবে অন্তর্ভুক্ত থাকে।
  4. Custom Serialization/Deserialization সমর্থন।

প্রয়োজনীয় সেটআপ

Maven ডিপেনডেন্সি (Spring Boot এর জন্য):

Spring Boot Jackson ডিফল্টভাবে অন্তর্ভুক্ত করে। যদি আলাদাভাবে যোগ করতে হয়:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version> <!-- সর্বশেষ ভার্সন -->
</dependency>

Step-by-Step উদাহরণ

১. একটি মডেল ক্লাস তৈরি করা

public class User {
    private String name;
    private int age;
    private String email;

    // Getters and Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

২. একটি @RestController তৈরি করা

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/users")
public class UserController {

    @PostMapping
    public String createUser(@RequestBody User user) {
        // JSON থেকে User object তৈরি হয়েছে
        return "User created: " + user.getName() + ", Age: " + user.getAge();
    }

    @GetMapping
    public User getUser() {
        // JSON আউটপুটে User object রিটার্ন হবে
        User user = new User();
        user.setName("Alice");
        user.setAge(25);
        user.setEmail("alice@example.com");
        return user;
    }
}

৩. API টেস্ট করা

POST API Call:
  • Request:

    {
      "name": "Bob",
      "age": 30,
      "email": "bob@example.com"
    }
    
  • Response:

    User created: Bob, Age: 30
    
GET API Call:
  • Response:

    {
      "name": "Alice",
      "age": 25,
      "email": "alice@example.com"
    }
    

Custom Serialization/Deserialization

Custom Serializer তৈরি করা

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;

import java.io.IOException;

public class UserSerializer extends StdSerializer<User> {

    public UserSerializer() {
        this(null);
    }

    public UserSerializer(Class<User> t) {
        super(t);
    }

    @Override
    public void serialize(User user, JsonGenerator gen, SerializerProvider provider) throws IOException {
        gen.writeStartObject();
        gen.writeStringField("fullName", user.getName());
        gen.writeNumberField("userAge", user.getAge());
        gen.writeEndObject();
    }
}

Custom Serializer সংযুক্ত করা

import com.fasterxml.jackson.databind.annotation.JsonSerialize;

@JsonSerialize(using = UserSerializer.class)
public class User {
    private String name;
    private int age;
    private String email;

    // Getters and Setters
}

Custom Serialization Output:

  • GET API Call:
{
  "fullName": "Alice",
  "userAge": 25
}

Custom Deserializer তৈরি করা

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

import java.io.IOException;

public class UserDeserializer extends JsonDeserializer<User> {

    @Override
    public User deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        // JSON Parsing Logic
        return null; // Custom deserialization logic
    }
}

Spring Boot Configuration (Custom ObjectMapper)

Spring Boot এ একটি কাস্টম ObjectMapper সংজ্ঞায়িত করে কাস্টম Serialization/Deserialization সমর্থন যোগ করা যায়।

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonConfig {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        // Custom configurations
        return mapper;
    }
}

Error Handling (Validation Integration)

Validation এবং Exception Handling:

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

@RestControllerAdvice
public class ValidationExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getBindingResult().getFieldErrors().forEach(error -> {
            errors.put(error.getField(), error.getDefaultMessage());
        });
        return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
    }
}

  1. Spring এর @RestController এবং @RequestBody Jackson এর মাধ্যমে JSON ডেটা হ্যান্ডলিংকে সহজ করে।
  2. Custom Serializer/Deserializer ব্যবহার করে JSON ফরম্যাট সম্পূর্ণ নিয়ন্ত্রণ করা যায়।
  3. Spring Boot এ ডিফল্ট ObjectMapper কাস্টমাইজ করা যায়।
  4. Validation এবং Exception Handling REST API এর জন্য Jackson Integration আরও শক্তিশালী করে।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...